抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

这两天需要开发一个通过接口传输文件的需求。其中需要将文件转换为二进制流的形式传输文件,将上传和接收到的文件转换位二进制流文件就是通过Function GUI_UPLOAD和Function GUI_DOWNLOAD来实现的,但是文件中的字符有中文,英文或其他特殊字符等情况存在,贸然使用上面的Function会出现乱码等问题。所以本片笔记会针对上面的问题进行解释并提出解决方案。

GUI_UPLOAD & GUI_DOWNLOAD 使用示例与解释

一、GUI_UPLOAD & GUI_DOWNLOAD

1.方法简介

本地文件上传到SAP内存中时可以使用Function GUI_UPLOAD。使用该Function可以上传多种类型的文件,不会限制文件的类型。

与上面的GUI_UPLOAD类似,在下载文件时,可以使用Function GUI_DOWNLOAD

2.参数介绍

(1)输入参数 FILETYPE

如上面输入参数介绍的。此处填写的文件类型并非是指上传的文件类型,而是上传文件的处理类型。在此处介绍一下可以填入的三种类型值的含义。

① ASC

The components of the internal table are filled from the file. Only data types with fixed length are allowed. The data must be contained in the file in its full length.

内部表格的组成部分由该文件填充。只允许使用固定长度的数据类型。数据必须以其完整长度包含在文件中。

此处的意思是指将文件中的内容读取到内表中,但是该内表的类型必须为固定长度类型的结构,且该结构的长度必须可以包含读取的内容的。

② BIN

The system reads a binary representation of the internal table from the file. The data is neither converted nor interpreted in this case. Usually, reasonable results are obtained only if the internal table consists of a single column of type ‘X’.

系统从文件中读取内部表的二进制表示形式。在这种情况下,既不转换数据,也不解释数据。通常,只有当内部表由“X”类型的单列组成时,才能获得合理的结果。

也就是说文件是通过二进制的文件流形式使用的,一般在传输文件时会使用这种类型的参数。且使用这种二进制类型参数接受文件时,内表的类型必须是XSTRING或RAW类型的内表。此处放一个我比较常用的标准二进制类型的内表 W3MIMETABTYPE

③ DAT

The components of the internal table are filled from the file. If the table contains several columns, the entries in the file must be separated by tabs. No conversion exits are performed.

The following applies for the different data types:

  • I or N or P or F

    • The numbers must be formatted according to the decimal representation defined in the user settings.
  • D

    • The date must be formatted according to the date format defined in the user settings.
  • T

    • The time must be formatted as hh:mm:ss.

内部表格的组成部分由该文件填充。如果表包含多个列,则文件中的条目必须用制表符分隔。不执行转换退出。

以下适用于不同的数据类型:

  • I或N或P或F

    • 数字必须根据用户设置中定义的十进制表示形式进行格式化。
  • D

    • 日期必须根据用户设置中定义的日期格式进行格式化。
  • T

    • 时间的格式必须为hh:mm:ss。

(2)输入参数 CODEPAGE

SAP 输入参数的描述:输出的字符表示。我的理解是上传文件时,对文件中字符处理的编码方式。当输出文件时便是输出文件的字符集。

CODEPAGE是NUMC类型4位长度的参数。在国内比较常用的几种类型如下:

  • 8400/8404 代表“GBK”中文简体

  • 8300/8304 (big5)代表台湾的中文繁体

  • 8340/8344 (Big5-HKSCS)代表香港的中文繁体,在媒体转换程序下载成TXT格式且不使用任何格式符,只是靠定义的字段长度时限制,用这种Codepage较好。

  • 4110/4310utf-8Unicode为4103使用时需要将WRITE_BOM=’X’(写入Unicode字节顺序标记)。

    如果要查看字符集的数据可以去 TCP00A表查看。举两个例子。例如UTF字符集内容:

    1.UTF字符集数据结果

其中属性类型如下所示:

2.UTF字符集属性类型列表

也可以使用Function NLS_GET_FRONTEND_CP根据语言代码查找对应的字符4位编码。

3.根据语言代码查找CodePage

如果你能一开始就和用户约定好可以将文件的编码格式告知你,则你可以通过Function SCP_CODEPAGE_BY_EXTERNAL_NAME根据编码方式获取Codepage。

4.根据文件编码格式获取Codepage

(3)GUI_UPLOAD参数介绍

① 输入参数
参数名 类型 缺省值 说明
FILENAME STRING 文件地址,虽然参数翻译为文件名称,但传入的其实是文件地址
FILETYPE CHAR10 ‘ASC’ 此处填写的文件类型并非是指上传的文件类型,而是上传文件的处理类型,可填入的值有三种。ASC(默认)、BIN和DAT。
HAS_FIELD_SEPARATOR CHAR01 SPACE 上传时,使用ASCII制表符分割列。
HEADER_LENGTH I 0 二进制数据的头长度
READ_BY_LINE CHAR01 ‘X’ 逐行将文件内容读进内表中
DAT_MODE CHAR01 SPACE 以ws_download“DAT”格式导入的数字和日期字段
CODEPAGE ABAP_ENCODING SPACE 输出的字符表示
IGNORE_CERR ABAP_BOOL ABAP_TRUE 指定是否忽略转换字符集的错误
REPLACEMENT ABAP_REPL ‘#’ 不可转换字符的替换字符,存在无法转换的字符时会使用传入的内容进行替换
CHECK_BOM CHAR01 SPACE 将检查代码页和字节顺序标记的一致性
VIRUS_SCAN_PROFILE VSCAN_PROFILE 病毒扫描配置文件
NO_AUTH_CHECK CHAR01 SPACE 关闭访问权限检查
② 输出参数
参数名 类型 说明
FILELENGTH I 上传的文件大小
HEADER XSTRING 二进制上传情况下的文件头

(4)GUI_DOWNLOAD 参数介绍

① 输入参数
参数名 类型 缺省值 说明
BIN_FILESIZE I 二进制文件的文件长度
FILENAME STRING 文件名称(下载地址)
FILETYPE CHAR10 ‘ASC’ 文件类型(ASC or BIN)
APPEND CHAR01 SPACE 写入模式(覆盖、追加)
WRITE_FIELD_SEPARATOR CHAR01 SPACE ASCII下载时用制表符分隔列
HEADER XSTRING ‘00’ 在文件开头以二进制模式写入的字节链
TRUNC_TRAILING_BLANKS CHAR01 SPACE 保留末尾空格
WRITE_LF CHAR01 ‘X’ 在每行的末尾插入一个行分隔符
COL_SELECT CHAR01 SPACE 激活列选择。您可以使用列选择来选择要传输到文件的列。此参数仅适用于FILETYPE“DAT”和“DBF”。
COL_SELECT_MASK CHAR255 SPACE 结合COL_SELECT,可以进行列选择。
DAT_MODE CHAR01 SPACE 以ws_download“DAT”格式编写的数字和日期字段
CONFIRM_OVERWRITE CHAR01 SPACE 仅在确认后覆盖文件
NO_AUTH_CHECK CHAR01 SPACE 关闭访问权限检查
CODEPAGE ABAP_ENCODING SPACE 输出的字符编码格式
IGNORE_CERR ABAP_BOOL ABAP_TRUE 指定是否忽略转换字符集的错误
REPLACEMENT ABAP_REPL ‘#’ 不可转换字符的替换字符
WRITE_BOM ABAP_BOOL SPACE 写入Unicode字节顺序标记
TRUNC_TRAILING_BLANKS_EOL CHAR01 ‘X’ 删除最后一列末尾的空格
WK1_N_FORMAT SPACE WK1类型文件中值列的格式
WK1_N_SIZE SPACE WK1类型文件中值列的列宽
WRITE_LF_AFTER_LAST_LINE ABAP_BOOL ABAP_TRUE 在最后一行之后写入行分隔符
SHOW_TRANSFER_STATUS ABAP_BOOL ABAP_TRUE
VIRUS_SCAN_PROFILE VSCAN_PROFILE ‘/SCET/GUI_DOWNLOAD’ 病毒扫描配置文件
② 输出参数
参数名 类型 说明
FILELENGTH I 传输的字节数

二、GUI_UPLOAD上传示例

1.执行效果

(1)选择屏幕

5.GUI_UPLOAD示例程序 选择画面

(2)ASC类型展示TXT文档

6.GUI_UPLOAD ASC展示程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
*--------------------------Variables-----------------------------------*
FIELD-SYMBOLS:
<FLT_TABLE> TYPE STANDARD TABLE.
*----------------------------Logic-------------------------------------*
IF GT_TABLE IS INITIAL AND GT_DTEXT IS INITIAL.
"展示数据为空
MESSAGE TEXT-E01 TYPE GC_S DISPLAY LIKE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.

CASE GC_X.
WHEN P_DISPL.
ASSIGN GT_TABLE TO <FLT_TABLE>.
WHEN P_DTEXT.
ASSIGN GT_DTEXT TO <FLT_TABLE>.
WHEN OTHERS.
ENDCASE.
CHECK SY-SUBRC EQ 0.

"数据展示界面设置
CL_DEMO_OUTPUT=>NEW(
)->BEGIN_SECTION( `Upload File Information`
)->NEXT_SECTION( `Upload File Path`
)->WRITE_DATA( P_FPATH
)->NEXT_SECTION( `File Data`
)->WRITE_DATA( <FLT_TABLE>
)->END_SECTION(
)->DISPLAY( ).

(3)DAT类型分列展示TXT文档

8.GUI_UPLOAD DAT 展示分列文本 结果展示

代码与上面的代码逻辑相同,两者共用了同一段逻辑,只是接收数据的类型与展示用的内表结构不一样。

(4)BIN类型展示PDF文档

11.GUI_UPLOAD BIN 展示PDF文件内容 结果画面

此处是使用了一个自适应容器和LOAD_DATA Function实现的。后期会单独出一篇笔记记录。

2.示例源代码

(1)Include TOP 全局变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
*----------------------------------------------------------------------*
* Constants
*----------------------------------------------------------------------*
CONSTANTS:
GC_X TYPE C LENGTH 1 VALUE 'X',
GC_S TYPE C LENGTH 1 VALUE 'S',
GC_E TYPE C LENGTH 1 VALUE 'E',
GC_NULL TYPE C LENGTH 1 VALUE ''.

*----------------------------------------------------------------------*
* Variables
*----------------------------------------------------------------------*
DATA:
GV_MESSAGE TYPE C,
GV_FILETYPE TYPE C LENGTH 100,
GV_SAVEOK TYPE SY-UCOMM,
GV_OKCODE TYPE SY-UCOMM.

*----------------------------------------------------------------------*
* Structure
*----------------------------------------------------------------------*
DATA:
BEGIN OF GS_TABLE,
VALUE TYPE C LENGTH 100,
END OF GS_TABLE,
BEGIN OF GS_DTEXT,
FILED1 TYPE C LENGTH 50,
FILED2 TYPE C LENGTH 50,
FILED3 TYPE C LENGTH 50,
FILED4 TYPE C LENGTH 50,
FILED5 TYPE C LENGTH 50,
END OF GS_DTEXT,
GS_BINTAB TYPE W3MIME.

*----------------------------------------------------------------------*
* Internal Table
*----------------------------------------------------------------------*
DATA:
GT_DTEXT LIKE TABLE OF GS_DTEXT,
GT_TABLE LIKE TABLE OF GS_TABLE,
GT_BINTAB TYPE W3MIMETABTYPE.

*----------------------------------------------------------------------*
* Object
*----------------------------------------------------------------------*
DATA:
GO_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER,
GO_HTML_CONTROL TYPE REF TO CL_GUI_HTML_VIEWER.

(2)Include SCR 选择屏幕源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK K01 WITH FRAME TITLE TEXT-T01.
PARAMETERS:
P_FPATH TYPE RLGRAP-FILENAME. "文件上传路径

SELECTION-SCREEN BEGIN OF LINE.
"执行方式
PARAMETERS:
P_TEXT NO-DISPLAY.
SELECTION-SCREEN COMMENT 1(23) TEXT-T02 FOR FIELD P_TEXT.

"展示数据 ASC
SELECTION-SCREEN POSITION 32.
PARAMETERS:
P_DISPL RADIOBUTTON GROUP GR01 USER-COMMAND UC1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 35(15) TEXT-R01 FOR FIELD P_DISPL.

"展示文件内容(PDF) BIN
SELECTION-SCREEN POSITION 50.
PARAMETERS:
P_DDATA RADIOBUTTON GROUP GR01 .
SELECTION-SCREEN COMMENT 52(15) TEXT-R02 FOR FIELD P_DDATA.

"分列Text文件 DAT
SELECTION-SCREEN POSITION 75.
PARAMETERS:
P_DTEXT RADIOBUTTON GROUP GR01 .
SELECTION-SCREEN COMMENT 77(15) TEXT-R03 FOR FIELD P_DTEXT.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK K01.

(3)Include PBO 自定义屏幕初始逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'G0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INITIAL_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE INITIAL_0100 OUTPUT.
PERFORM INITIAL_0100.
ENDMODULE.

(4)Include PAI 自定义屏幕功能逻辑

1
2
3
4
5
6
7
8
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
PERFORM EXIT.
ENDMODULE.

(5)Include F01 程序逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
*&---------------------------------------------------------------------*
*& Form SEARCH_HELP_FILEPATH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- P_FPATH
*&---------------------------------------------------------------------*
FORM SEARCH_HELP_FILEPATH CHANGING VALUE(PV_FILEPATH) TYPE RLGRAP-FILENAME.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
FIELD_NAME = 'C:\'
IMPORTING
FILE_NAME = PV_FILEPATH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_DATA .
*--------------------------Variables-----------------------------------*
DATA:
LT_FILE TYPE TABLE OF STRING,
LV_INDEX TYPE SY-TABIX,
LV_CODEPAGE TYPE ABAP_ENCODING,
LV_FILEPATH TYPE STRING,
LV_FILETYPE TYPE CHAR10,
LV_SPFLIFLAG TYPE C.
FIELD-SYMBOLS:
<FLT_TABLE> TYPE STANDARD TABLE.
*----------------------------Logic-------------------------------------*
REFRESH: GT_TABLE,GT_BINTAB,GT_DTEXT.

"获取文件类型
SPLIT P_FPATH AT '.' INTO TABLE LT_FILE.
LV_INDEX = LINES( LT_FILE ).
READ TABLE LT_FILE INTO GV_FILETYPE INDEX LV_INDEX.

CASE GC_X.
WHEN P_DISPL.
IF GV_FILETYPE NS 'TXT'.
"文件类型不是TXT,无法展示
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.
LV_CODEPAGE = '4310'. "UTF-8
LV_FILETYPE = 'ASC'.
LV_SPFLIFLAG = GC_NULL.
ASSIGN GT_TABLE TO <FLT_TABLE>.
CHECK SY-SUBRC EQ 0.
WHEN P_DDATA.
"校验文件类型
IF GV_FILETYPE NS 'PDF'.
"文件类型不是PDF,无法展示
MESSAGE TEXT-E02 TYPE GC_S DISPLAY LIKE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.
LV_FILETYPE = 'BIN'.
ASSIGN GT_BINTAB TO <FLT_TABLE>.
CHECK SY-SUBRC EQ 0.
WHEN P_DTEXT.
IF GV_FILETYPE NS 'TXT'.
"文件类型不是TXT,无法展示
MESSAGE TEXT-E03 TYPE GC_S DISPLAY LIKE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.
LV_CODEPAGE = '4310'. "UTF-8
LV_FILETYPE = 'DAT'.
LV_SPFLIFLAG = GC_X.
ASSIGN GT_DTEXT TO <FLT_TABLE>.
CHECK SY-SUBRC EQ 0.
WHEN OTHERS.
ENDCASE.

LV_FILEPATH = P_FPATH.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILEPATH
FILETYPE = LV_FILETYPE
HAS_FIELD_SEPARATOR = LV_SPFLIFLAG
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
CODEPAGE = LV_CODEPAGE
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
NO_AUTH_CHECK = 'X'
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
DATA_TAB = <FLT_TABLE>
* CHANGING
* ISSCANPERFORMED = ' '
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form DATA_OPERATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DATA_OPERATION .
CASE GC_X.
WHEN P_DISPL OR P_DTEXT.
PERFORM DISPLAY_DATA.
WHEN P_DDATA.
IF SY-BATCH IS INITIAL.
CALL SCREEN 0100.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA .
*--------------------------Variables-----------------------------------*
FIELD-SYMBOLS:
<FLT_TABLE> TYPE STANDARD TABLE.
*----------------------------Logic-------------------------------------*
IF GT_TABLE IS INITIAL AND GT_DTEXT IS INITIAL.
"展示数据为空
MESSAGE TEXT-E01 TYPE GC_S DISPLAY LIKE GC_E.
LEAVE LIST-PROCESSING.
ENDIF.

CASE GC_X.
WHEN P_DISPL.
ASSIGN GT_TABLE TO <FLT_TABLE>.
WHEN P_DTEXT.
ASSIGN GT_DTEXT TO <FLT_TABLE>.
WHEN OTHERS.
ENDCASE.
CHECK SY-SUBRC EQ 0.

"数据展示界面设置
CL_DEMO_OUTPUT=>NEW(
)->BEGIN_SECTION( `Upload File Information`
)->NEXT_SECTION( `Upload File Path`
)->WRITE_DATA( P_FPATH
)->NEXT_SECTION( `File Data`
)->WRITE_DATA( <FLT_TABLE>
)->END_SECTION(
)->DISPLAY( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INITIAL_0100
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM INITIAL_0100 .
*--------------------------Variables-----------------------------------*
DATA:
LV_URL TYPE C LENGTH 200.
*----------------------------Logic-------------------------------------*
IF GO_CONTAINER IS INITIAL.
"创建自适应容器对象
CREATE OBJECT GO_CONTAINER
EXPORTING
REPID = SY-REPID
DYNNR = SY-DYNGR
SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT
EXTENSION = 2000.
"创建用于展示HTML页面的组件对象
CREATE OBJECT GO_HTML_CONTROL
EXPORTING
PARENT = GO_CONTAINER.
"将PDF的二进制流传入HTML页面组件对象,得到用于展示PDF的虚拟URL地址
CALL METHOD GO_HTML_CONTROL->LOAD_DATA(
EXPORTING
TYPE = 'application'
SUBTYPE = GV_FILETYPE
IMPORTING
ASSIGNED_URL = LV_URL
CHANGING
DATA_TABLE = GT_BINTAB
EXCEPTIONS
DP_INVALID_PARAMETER = 1
DP_ERROR_GENERAL = 2
CNTL_ERROR = 3
OTHERS = 4 ).
"根据URL地址展示HTML页面
CALL METHOD GO_HTML_CONTROL->SHOW_URL( URL = LV_URL
IN_PLACE = 'X' ).
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form EXIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM EXIT .
*--------------------------Variables-----------------------------------*
CONSTANTS:
LC_BACK TYPE SY-UCOMM VALUE 'BACK',
LC_EXIT TYPE SY-UCOMM VALUE 'EXIT',
LC_CANC TYPE SY-UCOMM VALUE 'CANC'.
*----------------------------Logic-------------------------------------*
CLEAR: GV_SAVEOK.
GV_SAVEOK = GV_OKCODE.
CLEAR: GV_OKCODE.

CASE GV_SAVEOK.
WHEN LC_BACK OR LC_EXIT OR LC_CANC.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDFORM.

三、参考资料

[SAP ABAP开发技术总结] 字符编码与解码、Unicode

SAP GUI download文件中乱码问题Codepage参数说明

ABAP大虾帮忙:gui_download乱码

评论